package com.jeesite.modules.yzw.service;

import com.alibaba.fastjson.JSONObject;
import com.jeesite.common.config.Global;
import com.jeesite.modules.home.entity.cuibanDto;
import com.jeesite.modules.sys.entity.User;
import com.jeesite.modules.sys.utils.UserUtils;
import com.jeesite.modules.yzw.config.YzwProperties;
import com.jeesite.modules.yzw.constant.Constant;
import com.jeesite.modules.yzw.entity.MsgDetail;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.List;

/**
 * 督查系统-易政网数据同步定时调度
 * @author guohusong
 * @version 1.0
 * @date 2022/4/30 15:27
 */
@Component("lehandYzwPushTask")
public class LehandYzwPushTask implements YzwPushTask{
    private static final Logger logger = LoggerFactory.getLogger(LehandYzwPushTask.class);

    @Autowired
    private SyncIflytekService syncIflytekService;

    @Resource
    private YzwProperties yzwProperties;

    @Resource
    private YzwClient yzwClient;

    @Autowired
    private OtsDataService otsDataService;

    @Autowired
    private SmsClient smsClient;

    private  String defaultSign="【智慧督查考核】";

    public LehandYzwPushTask(){}


    /**
     * 按日期更新组织机构信息
     * @param startDate
     */
    @Override
    public synchronized void syncByDate(String startDate) {
        startDate = startDate.equals("1") ? null : startDate;
        logger.info("------------开始同步------------");
        try {
            // 按照日期同步全量机构数据
            queryDeptListByDate(startDate);

            // 按照全量机构用户关系数据
            queryDeptUserListAll();

            // 按照日期同步用户数据
            queryUserListByDate(startDate);

           // 组织数据入库
            otsDataService.findListOrg();

           // 用户数据入库
            otsDataService.findListUser();

            //组织用户关系入库
            //otsDataService.findOrgUser();
        } catch (Exception e) {
            logger.info("------------同步异常------------");
            logger.info(e.getMessage());
            logger.info(e.toString());
            e.printStackTrace();
        }
        logger.info("------------结束同步------------");
    }

    /**
     * 全量同步用户和组织机构信息
     */
    @Override
    public synchronized void syncAll() {
        logger.info("------------开始全量同步------------");
        try {
            // 同步全量机构数据
            queryDeptListAll();

            // 按照全量机构用户关系数据
            queryDeptUserListAll();

            // 全量同步用户数据
            queryUserListAll();

            //组织数据入库
            otsDataService.findListOrg();
            //剔除已经无效的组织
            otsDataService.deleteOrg();
            // 用户数据入库
            otsDataService.findListUser();
            //剔除已经无效的用户
            otsDataService.deleteUser();
        } catch (Exception e) {
            logger.info("------------全量同步异常------------");
            logger.info(e.getMessage());
            logger.info(e.toString());
            e.printStackTrace();
        }
        logger.info("------------结束全量同步------------");
    }

    /**
     * 全量的更新组织机构信息
     */
    public void queryDeptListAll() {
        syncIflytekService.queryDeptListAll();
    }

    /**
     * 按照日期同步组织机构数据信息
     */
    public void queryDeptListByDate(String startDate) {
        syncIflytekService.queryDeptListByDate(startDate);
    }

    /**
     * 全量的同步组织机构用户关系信息
     */
    public void queryDeptUserListAll() {
        syncIflytekService.queryDeptUserListAll();
    }

    /**
     * 按照日期同步组织机构用户关系数据信息
     */
    public void queryDeptUserListByDate(String startDate) {
        syncIflytekService.queryDeptUserListByDate(startDate);
    }

    /**
     * 全量同步讯飞用户信息
     */
    public void queryUserListAll() {
        syncIflytekService.queryUserListAll();
    }

    /**
     * 按照日期同步用户数据
     */
    public void queryUserListByDate(String startDate) {
        syncIflytekService.queryUserListByDate(startDate);
    }

    /**
     * 任务模块发送短信,传参不同
     * @param detail
     */
    public void pushYzwShortMsg(MsgDetail detail) {
        // 获取系统参数，系统开关-是否启用任务模块短信功能
        String config = Global.getConfig("sys.note.switch", "0");
        // 0表示关闭
        if ("0".equals(config)) {
            logger.info("短信功能未启用！");
            return;
        }
        // 根据接收人编码获取接收人信息
        User acceptUser = UserUtils.get(detail.getSubjectid());
        // 1表示开启（易政网)短信功能
        if ("1".equals(config) && yzwProperties.isYzwFunc() && acceptUser != null) {
            // 根据接收人编码获取其在讯飞系统中的id
            String subjectUserIdIfly = otsDataService.getIflyId(detail.getSubjectid());
            // 获取发送人在讯飞系统中的id
            String sendUserIdIfly = otsDataService.getIflyId(detail.getSendid());
            if (StringUtils.isNotBlank(subjectUserIdIfly) && StringUtils.isNotBlank(sendUserIdIfly) && StringUtils.isNotBlank(acceptUser.getMobile())) {
                try {
                    JSONObject contentJson = new JSONObject();
                    contentJson.put("message", defaultSign + detail.getMesg());
                    // 处理短信内容
                    JSONObject objectM = new JSONObject();
                    objectM.put("content", contentJson);
                    objectM.put("userId", subjectUserIdIfly);
                    objectM.put("telphone", acceptUser.getMobile());
                    objectM.put("type", Constant.MsgType.TASK_CREATE_NOTE);
                    // 调取讯飞短信接口
                    yzwClient.pushMessage(objectM.toJSONString(), sendUserIdIfly);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        // 2表示使用自己短信平台
        if ("2".equals(config) && acceptUser != null&&StringUtils.isNotBlank(acceptUser.getMobile())) {
            smsClient.sendSmsAsync(acceptUser.getMobile(), detail.getMesg());
        }
    }

    public void pushYzwShortMsg2(cuibanDto cuiban) {
        // 获取系统参数，系统开关-是否启用任务模块短信功能
        String config = Global.getConfig("sys.note.switch", "0");
        // 0表示关闭
        if ("0".equals(config)) {
            logger.info("短信功能未启用！");
            return;
        }
        // 根据接收人编码获取接收人信息
        User acceptUser = UserUtils.get(cuiban.getUserCode());
        // 1表示开启（易政网)短信功能
        if ("1".equals(config) && yzwProperties.isYzwFunc() && acceptUser != null) {
            // 根据接收人编码获取其在讯飞系统中的id
            String subjectUserIdIfly = otsDataService.getIflyId(cuiban.getUserCode());
            // 获取发送人在讯飞系统中的id
            String sendUserIdIfly = otsDataService.getIflyId(UserUtils.getUser().getUserCode());
            if (StringUtils.isNotBlank(subjectUserIdIfly) && StringUtils.isNotBlank(sendUserIdIfly) && StringUtils.isNotBlank(acceptUser.getMobile())) {
                try {
                    JSONObject contentJson = new JSONObject();
                    contentJson.put("message", defaultSign + cuiban.getMessage());
                    // 处理短信内容
                    JSONObject objectM = new JSONObject();
                    objectM.put("content", contentJson);
                    objectM.put("userId", subjectUserIdIfly);
                    objectM.put("telphone", cuiban.getPhone());
                    objectM.put("type", Constant.MsgType.TASK_CREATE_NOTE);
                    // 调取讯飞短信接口
                    yzwClient.pushMessage(objectM.toJSONString(), sendUserIdIfly);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        // 2表示使用自己短信平台
        if ("2".equals(config) && acceptUser != null) {
            smsClient.sendSmsAsync(cuiban.getPhone(), cuiban.getMessage());
        }
    }


    /**
     * 考核模块发送短信,传参不同
     * @param detail
     */
    public void pushScoreShortMsg(MsgDetail detail) {
        // 获取系统参数，系统开关-是否启用考核模块短信功能
        String config = Global.getConfig("sys.score.msgswitch", "0");
        // 0表示关闭
        if ("0".equals(config)) {
            logger.info("短信功能未启用！");
            return;
        }
        // 根据接收人编码获取接收人信息
        User acceptUser = UserUtils.get(detail.getSubjectid());
        // 1表示开启（易政网)短信功能
        if ("1".equals(config) && yzwProperties.isYzwFunc() && acceptUser != null) {
            // 根据接收人编码获取其在讯飞系统中的id
            String subjectUserIdIfly = otsDataService.getIflyId(detail.getSubjectid());
            // 获取发送人在讯飞系统中的id
            String sendUserIdIfly = otsDataService.getIflyId(detail.getSendid());
            if (StringUtils.isNotBlank(subjectUserIdIfly) && StringUtils.isNotBlank(sendUserIdIfly) && StringUtils.isNotBlank(acceptUser.getMobile())) {
                try {
                    JSONObject contentJson = new JSONObject();
                    contentJson.put("message", defaultSign + detail.getMesg());
                    // 处理短信内容
                    JSONObject objectM = new JSONObject();
                    objectM.put("content", contentJson);
                    objectM.put("userId", subjectUserIdIfly);
                    objectM.put("telphone", acceptUser.getMobile());
                    objectM.put("type", Constant.MsgType.TASK_CREATE_NOTE);
                    // 调取讯飞短信接口
                    yzwClient.pushMessage(objectM.toJSONString(), sendUserIdIfly);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        // 2表示使用自己短信平台
        if ("2".equals(config) && acceptUser != null&&StringUtils.isNotBlank(acceptUser.getMobile())) {
            smsClient.sendSmsAsync(acceptUser.getMobile(), detail.getMesg());
        }
    }

    /**
     * 待办变动提醒
     * @param sendUserId 消息内容
     * @param subjectUserId 任务接收人id
     */
    public void sendLxWebMessage(String sendUserId, String subjectUserId) {
        if (yzwProperties.isYzwFunc()) {
            // 获取接收人在讯飞系统中的信息
            String subjectUserIdIfly = otsDataService.getIflyId(subjectUserId);

            // 获取发送人在讯飞系统中的信息
            String sendUserIdIfly = otsDataService.getIflyId(sendUserId);

            if (StringUtils.isNotBlank(subjectUserIdIfly) && StringUtils.isNotBlank(sendUserIdIfly)) {
                try {
                    yzwClient.sendLxWebMessage(sendUserIdIfly, subjectUserIdIfly);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
